package com.ybkj.o2o.sales.mapper;

import com.ybkj.o2o.sales.entity.Activity;
import com.ybkj.o2o.sales.entity.Activity.ActivityEvent;

import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ActivityMapper {

  /**
   * 保存活动信息到数据库.
   * 
   * @param activity 活动内容
   * @return 保存成功返回Id信息
   */
  Long insertRecord(Activity activity);

  /**
   * 根据主键查询活动信息.
   * 
   * @param id 活动id
   * @param appKey 系统key
   * @return Activity
   */
  Activity selectByPrimaryKey(@Param("id") Long id, @Param("appKey") String appKey);


  /**
   * 根据主键删除活动信息.
   * 
   * @param id 活动id
   * @return 返回影响的行数
   */
  int deleteByPrimaryKey(@Param("id") Long id, @Param("appKey") String appKey);

  /**
   * 分页查询活动.
   * 
   * @param companyId 公司id
   * @param activityEvent 活动事件
   * @param activityType 活动类型
   * @param offset 页数
   * @param size 每页数量
   * @return List
   */
  List<Activity> selectActivities(@Param("companyId") Long companyId,
      @Param("activityEvent") String activityEvent, @Param("activityType") String activityType,
      @Param("offset") Integer offset, @Param("size") Integer size, @Param("appKey") String appKey);

  /**
   * 分页查询所有活动.
   * 
   * @param companyId 公司id
   * @param offset 页数
   * @param size 每页数量
   * @return List
   */
  List<Activity> selectAllActivities(@Param("companyId") Long companyId,
      @Param("offset") Integer offset, @Param("size") Integer size, @Param("appKey") String appKey);


  /**
   * 统计活动数量.
   * 
   * @param companyId 公司id
   * @param activityEvent 活动事件
   * @param activityType 活动类型
   * @param appKey 系统key
   * @return Long
   */
  long countActivities(@Param("companyId") Long companyId,
      @Param("activityEvent") String activityEvent, @Param("activityType") String activityType,
      @Param("appKey") String appKey);

  /**
   * 统计所有活动数量.
   * 
   * @param companyId 公司id
   * @param appKey 系统key
   * @return Long
   */
  long countAllActivities(@Param("companyId") Long companyId, @Param("appKey") String appKey);

  /**
   * 查询有效活动信息.
   * 
   * @param activityEvent 活动事件
   * @return List
   */
  List<Activity> selectValidByEvent(@Param("activityEvent") ActivityEvent activityEvent,
      @Param("appKey") String appKey);

  List<Activity> activityList(@Param("activityEvent") ActivityEvent activityEvent, @Param("linesId") List<Long> linesId, @Param("appKey") String appKey);

  /**
   * 查询最近活动信息.
   * 
   * @param companyId 公司id
   * @param offset 页数
   * @param size 每页数量
   * @return List
   */
  List<Activity> selectLastedByCompany(@Param("companyId") Long companyId,
      @Param("offset") Integer offset, @Param("size") Integer size, @Param("appKey") String appKey);

  /**
   * 查询最近活动数量.
   * 
   * @param companyId 公司id
   * @return Long
   */
  long countLastedByCompany(@Param("companyId") Long companyId, @Param("appKey") String appKey);

  /**
   * 根据主键修改数据.
   * 
   * @param activity 活动内容
   * @return Integer
   */
  int updateByPrimaryKey(Activity activity);

  /**
   * 停止活动.
   * 
   * @param id 活动id
   * @param appKey 系统key
   * @return Integer
   */
  int stopByPrimaryKey(@Param("id") Long id, @Param("appKey") String appKey);

  /**
   * 查询首单免费活动.
   * @param companyId 公司id
   * @param activityEvent 活动事件
   * @param appKey 系统key
   * @return List
   */
  List<Activity> selectOneFreeActivity(@Param("companyId") Long companyId,
      @Param("activityEvent") ActivityEvent activityEvent, @Param("appKey") String appKey);


}
